En esta sesión veremos qué son las clases, para qué sirven y cómo funcionan. Además crearemos nuevas clases y veremos que es muy fácil hacer objetos nuevos en python!
La primera pregunta será dirigida hacia ustedes, ¿alguna sabe algo acerca de las clases? o ¿para ustedes qué es una clase?
Bueno después de haber escuchado sus opiniones veremos que una clase es esto:
Esta imagen significa que las clases son una especie de plano (o instrucciones) para crear un nuevo objeto. En el caso de la imagen el objeto sería un edificio, pero podemos crear cualquier tipo de objetos!!! OJO, no hay que confundirnos, las clases no son los objetos como tal, si te das cuenta un mismo plano nos sirve para crear 1,2 ... 'n' número de casas, todas las casas o edificios que se construyan con el mismo plano van a tener exactamente las mismas propiedades. Por ejemplo, todas las casas construídas van a tener cuartos del mismo tamaño, con el mismo arreglo espacial y los mismos enchufes!
Lo mismo pasa en python, si creas una clase 'casa', cada vez que llames a esa clase vas a crear un objeto casa con las características especificadas dentro de la clase.
Aunque no lo sabíamos (a excepción de las que si sabían de las clases) ya habíamos trabajado con clases anteriormente. Cuando tu creas un 'string', todas las propiedades de la clase 'string' son heredadas al objeto que creaste. Recuerdas que ya habíamos visto unas cuantas de las propiedades de las 'string' y de las funciones que se pueden hacer con ellas...
Esto me lleva al siguiente punto que hay que abordar. Las clases llevan dentro de sí funciones (que cuando están en las clases se llaman métodos) y atributos (que son las características del objeto). Así que se puede pensar en las clases como un nivel de jerarquía mayor a lo que ya habíamos visto antes, como variables y funciones.
Ya que hemos comprendido el concepto de las clases pasaremos a ver cómo es que le tiene uno que escribir a python para que entienda que queremos crear una.
Lo primero con lo que se inicia es con la palabra class
seguido del nombre de nuestra clase con unos paréntesis que llevan la palabra objeto dentro de si. Al final de todo esto llevan dos puntos, al estilo de las funciones que ya vimos.
class MiCasa(object):
Después viene la parte importante de una clase. Para que se pueda inicializar correctamente, una clase debe de contar con un método "inicializador" que se llama init que va a depender del objeto (o instancia) que estamos creando y de todos los atributos que queramos darle. Después vamos a crear variables para cada instancia. Sé que suena un poco complicado pero veamos como se escribe un ejemplo.
class MiCasa(object):
"""Clase que va a crear un objeto casa con los atributos
cuartos, puertas, ventanas y tamaño"""
def __init__(self, cuartos, puertas, ventanas, tamaño):
self.cuartos = cuartos
self.puertas = puertas
self.ventanas = ventanas
self.tamaño = tamaño
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
Ya que tenemos una instancia con atributos, por qué no empezar a meter métodos que operen sobre estos atributos. Se me ocurre que tal vez queremos calcular el precio de nuestra casa y eso dependerá del número de cuartos y el tamaño. Por cuarto podremos cobrar 50,000.00 mxn y el tamaño si es menor o igual a 150m la tarifa es de 800,000.00 mnx pero si es mayor a 150m cobraremos 1,000,000.00 mxn.
Escribe la función "precio" que fue descrita anteriormente
In [ ]:
In [ ]:
In [ ]:
Ahora que ya tenemos la función, podemos agregarla a nuestra clase para que se convierta en un método. Esto es bastante sencillo ya que solo tenemos que poner nuestro método dentro de la indentación de nuestra clase y para llamar al método ocuparemos la misma notación de punto. Ejemplo
casa.precio
In [ ]:
In [ ]:
In [ ]:
Yo si tengo algunas, la primera es qué pasa si queremos usar un método que está fuera de la clase, podemos llamarlo? o el caso contrario, qué pasa si queremos usar un método que hay en una clase para que funcione en otro ejemplo independiente de la instancia?
Para responder esto hay que experimentar!!!
Haz una función que se llame expandir que dependa de del tamaño de la casa. Esta función debería de agrandar el tamaño en un 25%. Ahora prueba usar esta función con una instancia de MiCasa
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
Lo último que veremos en esta sesión es el concepto de "Herencia", así como tus padres crearon un@ hij@ con características similares a los ellos, las clases también pueden dar origen a otras clases.
Básicamente, la herencia en las clases significa que puedes crear una clase nueva que posea atributos y métodos similares a otros que tiene una clase creada anteriormente. Como ejemplo, piensa en nuestra clase MiCasa, los atributos que tiene pueden bien compartirse con otros objetos parecidos como son edificios, hospitales, restaurantes, entre otros. Si quisiéramos abstraer estos objetos físicos en un concepto podríamos hacer una clase madre llamada Inmueble. Un inmueble es un concepto que tenemos que es muy general y puede abarcar varios objetos físicos (como los mencionados anteriormente) y podríamos pensar como que un inmueble es "la madre" de cualquier tipo de construcción. Todos los atributos y métodos que posea la clase Inmueble pueden ser utilizados por la clase Edificio, MiCasa, etc y lo que es mejor aún, no sólo los puedes utilizar, si no puedes agregar más cosas e incluso modificar los métodos o atributos de la clase madre.
Para crear una clase hija, lo que debes hacer es escribir de la siguiente manera:
class Hija(Madre):
Yo calculo que para este entonces se abrá terminado el tiempo, así que l@s invito a hacer los ejercicios de codecademy acerca de las clases en Python. Creo que son muy buenos y divertidos de hacer, y pueden complementar lo que vimos hoy. La liga es la siguiente: Codecademy
In [ ]: